home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / TUTORIAL / 0855.ZIP / COM2ASM.BAS < prev    next >
BASIC Source File  |  2000-01-05  |  3KB  |  54 lines

  1. 10 'COM2ASM.BAS  COPYRIGHT 1983 BY RICH WINKEL
  2. 20 'THIS PROGRAM IS NOT TO BE SOLD.  FOR FREE DISTRIBUTION ONLY.
  3. 30 DEFINT A-Z:DIM LIN$(999),JMP$(50) 'ARRAY OF REFERENCED HEX ADDRESSES
  4. 40 GOSUB 490
  5. 50 INPUT "Enter name of input file: ";INFILE$
  6. 60 INPUT "Enter name of output file: ";OUTFILE$
  7. 70 OPEN INFILE$ FOR INPUT AS #1
  8. 80 OPEN OUTFILE$ FOR OUTPUT AS #2:PRINT #2,".RADIX 16"
  9. 90 IF EOF(1) THEN 160
  10. 100 LINE INPUT #1,A$:IF LEN(A$)<28 THEN 90 ELSE J$=MID$(A$,25,4)
  11. 110 FOR I=1 TO JMPNUM:IF J$<>JMP$(I) THEN NEXT:GOTO 90
  12. 120 IF MID$(A$,33,1)="[" THEN 90 'IF INDIRECT ADDRESSING, SKIP IT
  13. 130 IF MID$(A$,33,3)="FAR" THEN 90
  14. 140 IF MID$(A$,37,1)=":" THEN 90 'IF INTER-SEGMENT JUMP, SKIP
  15. 150 LIN=LIN+1:LIN$(LIN)=MID$(A$,33,4):GOTO 90 'OTHERWISE, SAVE THE REFERENCE
  16. 160 CLOSE #1:OPEN INFILE$ FOR INPUT AS #1 'RE-POSITION READ POINTER
  17. 170 PRINT "Sorting . ." 'super shell sort (byte may '83)
  18. 180 D=2^INT(LOG(LIN)/LOG(2))-1 'SORT REFERENCED ADDRESSES
  19. 190 FOR I=1 TO LIN-D
  20. 200 IF LIN$(I)<=LIN$(I+D) THEN 260 ELSE T$=LIN$(I+D):LIN$(I+D)=LIN$(I)
  21. 210 IF I<=D THEN LIN$(I)=T$:GOTO 260
  22. 220 FOR J=I-D TO 1 STEP -D
  23. 230 IF T$>=LIN$(J) THEN 250 ELSE LIN$(J+D)=LIN$(J)
  24. 240 NEXT J
  25. 250 LIN$(J+D)=T$
  26. 260 NEXT I
  27. 270 D=INT(D/2):IF D>0 THEN 190 ELSE I=1
  28. 280 IF I=LIN THEN 310 'ARRAY IS SORTED, NOW GET RID OF DUPLICATES
  29. 290 IF LIN$(I)=LIN$(I+1) THEN FOR J=I TO LIN:LIN$(J)=LIN$(J+1):NEXT:LIN=LIN-1 ELSE I=I+1
  30. 300 GOTO 280
  31. 310 L=1 'NOW GO BACK THRU FILE AND PLUG IN LABELS FOR ADDRESSES
  32. 320 IF EOF(1) THEN CLOSE:END
  33. 330 LINE INPUT #1,A$:IF LEN(A$)<28 THEN 320
  34. 340 IF MID$(A$,6,4)<>LIN$(L) THEN MID$(A$,6,4)="    ":GOTO 380 'CHECK ADDRESS
  35. 350 L$=STR$(L):L$="L"+RIGHT$(L$,LEN(L$)-1) 'IF REFERENCED, REPLACE WITH LABEL
  36. 360 L$=L$+":"+STRING$(4-LEN(L$)," ")
  37. 370 MID$(A$,6,5)=L$:L=L+1
  38. 380 J$=MID$(A$,25,4):FOR I=1 TO JMPNUM:IF J$<>JMP$(I) THEN NEXT:GOTO 450
  39. 390 IF MID$(A$,33,1)="[" THEN 450
  40. 400 IF MID$(A$,33,3)="FAR" THEN 450
  41. 410 IF MID$(A$,37,1)=":" THEN 450
  42. 420 REF$=MID$(A$,33,4):FOR I=1 TO LIN:IF REF$<>LIN$(I) THEN NEXT
  43. 430 L$=STR$(I):L$="L"+RIGHT$(L$,LEN(L$)-1) 'REPLACE ADDRESS WITH PROPER LABEL
  44. 440 MID$(A$,33,4)=L$+STRING$(4-LEN(L$)," ")
  45. 450 A$=MID$(A$,6,5)+"  "+RIGHT$(A$,LEN(A$)-23) 'GET RID OF SEG & OP CODE
  46. 460 FOR I=LEN(A$) TO 2 STEP -1:IF MID$(A$,I,1)=" " THEN NEXT
  47. 470 A$=LEFT$(A$,I) 'CHOP OFF TRAILING BLANKS
  48. 480 PRINT A$:PRINT #2,A$:GOTO 320
  49. 490 JMPNUM=33:FOR I=1 TO JMPNUM:READ JMP$(I):NEXT:RETURN
  50. 500 DATA "JMP ",JMPS,CALL,"JA  ",JNBE,"JAE ","JNB ","JB  ",JNAE,"JBE ","JNA ",JCXZ
  51. 510 DATA "JE  ","JZ  ","JG  ",JNLE,"JGE ","JNL ","JL  ",JNGE,"JLE ","JNG "
  52. 520 DATA "JNE ","JNZ ","JNO ","JNP ","JPO ","JNS ","JO  ","JP  ","JPE ","JS  "
  53. 530 DATA LOOP
  54.